import uuid
from sqlalchemy.sql import func
from werkzeug.security import generate_password_hash, check_password_hash

from app import db


def generate_uuid16():
    """
    生成一个16位数字字符串：
    通过将 uuid4 生成的整数对 10**16 取余，并格式化为16位，不足前面补0。
    """
    return f"{uuid.uuid4().int % (10**16):016d}"

class User(db.Model):
    __tablename__ = 'users'

    id = db.Column(db.String(255), primary_key=True, default=generate_uuid16)
    status = db.Column(db.SmallInteger, nullable=False, default=1)
    email = db.Column(db.String(255), nullable=False)
    create_at = db.Column(db.DateTime, default=func.current_timestamp())
    update_at = db.Column(db.DateTime, default=func.current_timestamp(), onupdate=func.current_timestamp())
    password = db.Column(db.String(255), nullable=False)

    # 反向关系，可以通过 user.topics 获取所有 UserTopicAssociation 记录
    topics = db.relationship('UserTopicAssociation', backref='user', lazy=True)


    def __repr__(self):
        return f"<User(id='{self.id}', email='{self.email}')>"

    def get_id(self):
        return str(self.id)

    def get_email(self):
        return str(self.email)

    def set_password(self, password):
        # 使用 Werkzeug 的 generate_password_hash 对密码进行哈希处理
        self.password = generate_password_hash(password)

    def check_password(self, password):
        # 使用 Werkzeug 的 check_password_hash 检查密码
        return check_password_hash(self.password, password)
    def create_user(self):

        db.session.add(self)
        db.session.commit()

    def update_user(self):
        db.session.commit()
